#ifndef DEFINICIONES_GLOBALES_H
#define DEFINICIONES_GLOBALES_H

#include <map>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <cstdlib>	// exit()
#include <iostream>
#include <assert.h>
using namespace std;

#include "constantes.h"
#include "Otros/Punto.h"
#include "Otros/Dimensiones.h"

#ifndef NULL
#define NULL 0
#endif

#define forn(i,n) for(int i=0;i<n;i++)
#define forsn(i,s,n) for(int i=s;i<n;i++)
#define forall(it,X) for(typeof((X).begin()) it=(X).begin();it!=(X).end();it++)
#define exists(e,X) ((X).find(e)!=(X).end())

#define CORE Core::Instancia()
#define JUGADOR Core::Instancia()->EstadoDelJuego->Jugador
#define ENTIDAD(id) Core::Instancia()->EstadoDelJuego->Entidades[id] // Entidades es un map

SDL_Surface* CargarImagen(const char* filename);
void Error(const char* msg);

/* Esto es re cabeza, pero este es el orden de las filas de las spritesheets de los personajes */
enum Orientacion_t{ N=0, E, S, O };
/* Es el mapeo de las orientaciones a direcciones */
const static Punto direcciones[4] = { Punto(0,-1), Punto(1,0), Punto(0,1), Punto(-1,0) };

#endif
